/*
 * Copyright (C) 2009 Leandro Aparecido <lehphyro@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.metalframework.persistence.engine;

import java.lang.reflect.*;

import org.apache.commons.lang.*;

/**
 * Context of a method invocation being managed by Japa.
 * 
 * @since 1.0
 * @see org.metalframework.persistence.engine.Engine#processMethodCall(PersistentObject, Method, Object...)
 */
public class MethodCallContext {
	/**
	 * Target of the method call.
	 */
	private PersistentObject target;
	
	/**
	 * Method being invoked.
	 */
	private Method method;
	
	/**
	 * Original arguments passed to the method invocation.
	 */
	private Object[] originalArguments;
	
	/**
	 * Resulting arguments of Japa processing.
	 */
	private Object[] modifiedArguments;

	public MethodCallContext(PersistentObject target,
	                         Method method,
	                         Object[] originalArguments,
	                         Object[] modifiedArguments) {
		this.target = target;
		this.method = method;
		this.originalArguments = ArrayUtils.clone(originalArguments);
		this.modifiedArguments = ArrayUtils.clone(modifiedArguments);
	}
	
	// Getters
	
	public PersistentObject getTarget() {
		return target;
	}

	public Method getMethod() {
		return method;
	}

	public Object[] getOriginalArguments() {
		return ArrayUtils.clone(originalArguments);
	}

	public Object[] getModifiedArguments() {
		return ArrayUtils.clone(modifiedArguments);
	}

}
